From 957eddb20659a439f0a5f21e7b38c67cb1c0d9ce Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Mon, 26 Jun 2006 14:33:01 -0600 Subject: [PATCH] [IA64] ptc.g virtualization fix VMM only needs to switch rr0 and pta when emulating ptc.g. Because VMM only use rr0 and pta to do global purge on other LPs. VMM doesn't need to switch rr7, it is time consuming operation. Signed-off-by: Anthony Xu --- xen/arch/ia64/vmx/vmmu.c | 5 ++++- xen/arch/ia64/vmx/vtlb.c | 12 ------------ 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/xen/arch/ia64/vmx/vmmu.c b/xen/arch/ia64/vmx/vmmu.c index df55aea9ef..add9e5d6be 100644 --- a/xen/arch/ia64/vmx/vmmu.c +++ b/xen/arch/ia64/vmx/vmmu.c @@ -517,7 +517,7 @@ struct ptc_ga_args { static void ptc_ga_remote_func (void *varg) { - u64 oldrid, moldrid; + u64 oldrid, moldrid, mpta; struct ptc_ga_args *args = (struct ptc_ga_args *)varg; VCPU *v = args->vcpu; @@ -525,10 +525,13 @@ static void ptc_ga_remote_func (void *varg) VMX(v, vrr[0]) = args->rid; moldrid = ia64_get_rr(0x0); ia64_set_rr(0x0,vrrtomrr(v,args->rid)); + mpta = ia64_get_pta(); + ia64_set_pta(v->arch.arch_vmx.mpta); ia64_srlz_d(); vmx_vcpu_ptc_l(v, args->vadr, args->ps); VMX(v, vrr[0]) = oldrid; ia64_set_rr(0x0,moldrid); + ia64_set_pta(mpta); ia64_dv_serialize_data(); } diff --git a/xen/arch/ia64/vmx/vtlb.c b/xen/arch/ia64/vmx/vtlb.c index ba6bce42ca..f0020b48ce 100644 --- a/xen/arch/ia64/vmx/vtlb.c +++ b/xen/arch/ia64/vmx/vtlb.c @@ -267,14 +267,6 @@ static void vtlb_purge(VCPU *v, u64 va, u64 ps) // machine_tlb_purge(va, ps); } -static void -switch_rr7_and_pta(VCPU* v) -{ - if (VMX_DOMAIN(v)) - vmx_load_rr7_and_pta(v); - else - load_region_reg7_and_pta(v); -} /* * purge VHPT and machine TLB @@ -287,8 +279,6 @@ static void vhpt_purge(VCPU *v, u64 va, u64 ps) size = PSIZE(ps); start = va & (-size); end = start + size; - if (current != v) - switch_rr7_and_pta(v); while(start < end){ hash_table = (thash_data_t *)ia64_thash(start); tag = ia64_ttag(start); @@ -310,8 +300,6 @@ static void vhpt_purge(VCPU *v, u64 va, u64 ps) start += PAGE_SIZE; } machine_tlb_purge(va, ps); - if (current != v) - switch_rr7_and_pta(current); } /* -- 2.30.2